/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerInformes;
import GUI.Jefe.GestionInformes.PanelConsultarDeudores;
import LogicaNegocio.Documento.DocumentoPDF;
import LogicaNegocio.Documento.FiltroDocumentos;
import LogicaNegocio.Usuarios.Usuario;
import com.itextpdf.text.BadElementException;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Esta clase en java permite el control de eventos generados
 * desde el panel consultar deudores.
 *
 *
 * @author sebaxtian
 * Archivo: ControlConsultarDeudores.java
 * @version 1.0
 * Fecha: mar jun  8 23:10:53 COT 2010
 */


public class ControlConsultarDeudores {

    //Atriburos de clase.
    private PanelConsultarDeudores panelConsultarDeudores;
    private ManagerInformes gestorInformes;
    private List<Usuario> listaUsuariosDeudores;


    public ControlConsultarDeudores(PanelConsultarDeudores panelConsultarDeudores) {
        this.panelConsultarDeudores = panelConsultarDeudores;
        gestorInformes = new ManagerInformes();
        listaUsuariosDeudores = new ArrayList<Usuario>();
    }

    public void consultarDeudores() {
        listaUsuariosDeudores = gestorInformes.obtenerUsuariosDeudores();
        mostrarListaUsuariosDeudores(listaUsuariosDeudores);
    }

    private void mostrarListaUsuariosDeudores(List<Usuario> listaDeudores) {
        Usuario usuario;
        for(int i = 0; i < listaDeudores.size(); i++){
            if(panelConsultarDeudores.tablaDeudores.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelConsultarDeudores.tablaDeudores.getModel();
                Object fila[] = {"","","","","",""};
                tmp.addRow(fila);
            }
            usuario = listaDeudores.get(i);
            String nombre = usuario.getPrimerNombre()+" ";
            if(usuario.getSegundoNombre() != null)
                nombre += usuario.getSegundoNombre()+" ";
            nombre += usuario.getPrimerApellido()+" ";
            if(usuario.getSegundoApellido() != null)
                nombre += usuario.getSegundoApellido();
            panelConsultarDeudores.tablaDeudores.setValueAt(usuario.getIdentificacionUsuario(), i, 0);
            panelConsultarDeudores.tablaDeudores.setValueAt(nombre, i, 1);
            panelConsultarDeudores.tablaDeudores.setValueAt(usuario.getDireccion(), i, 2);
            panelConsultarDeudores.tablaDeudores.setValueAt(usuario.getTelefono(), i, 3);
            panelConsultarDeudores.tablaDeudores.setValueAt(usuario.getEmail(), i, 4);
            panelConsultarDeudores.tablaDeudores.setValueAt(usuario.getValorDeuda(), i, 5);
        }
    }

    public void limpiar() {
        for(int i = 0; i < panelConsultarDeudores.tablaDeudores.getRowCount(); i++){
            DefaultTableModel tmp = (DefaultTableModel)panelConsultarDeudores.tablaDeudores.getModel();
            tmp.removeRow(i);
            if(tmp.getRowCount()>0){
                limpiar();
            }
        }
    }

    public void exportar() {
        try {
            exportarADocumento();
        } catch(FileNotFoundException ex) {
            JOptionPane.showMessageDialog(panelConsultarDeudores, "No se encuentra el archivo para exportar", "Exportar", JOptionPane.INFORMATION_MESSAGE);
        } catch(DocumentException ex) {
            JOptionPane.showMessageDialog(panelConsultarDeudores, "Error al tratar de escribir los datos en el documento pdf", "Exportar", JOptionPane.INFORMATION_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(panelConsultarDeudores, "Error al tratar de crear el archivo", "Exportar", JOptionPane.ERROR_MESSAGE);
        }
    }

    private void exportarADocumento() throws IOException, FileNotFoundException, DocumentException {
        File archivo;
        JFileChooser selectorArchivos = new JFileChooser();
        selectorArchivos.addChoosableFileFilter(new FiltroDocumentos());
        int op = selectorArchivos.showSaveDialog(null);
        if(op == JFileChooser.APPROVE_OPTION){
            archivo = selectorArchivos.getSelectedFile();
            String extension = new FiltroDocumentos().getExtension(archivo);
            if(archivo.createNewFile()){
                if(extension == null){
                    //archivo.renameTo(new File(archivo.getAbsolutePath()+".pdf"));
                    archivo.delete();
                    archivo = new File(archivo.getAbsolutePath()+".pdf");
                    crearDocumentoPDF(archivo);
                }else if(!extension.equals("pdf")){
                    JOptionPane.showMessageDialog(selectorArchivos, "El archivo debe tener extension pdf", "Guardar", JOptionPane.INFORMATION_MESSAGE);
                    archivo.delete();
                }else{
                    crearDocumentoPDF(archivo);
                }
            }else{
                JOptionPane.showMessageDialog(selectorArchivos, "Ya existe un archivo con nombre "+archivo.getName(), "Guardar", JOptionPane.WARNING_MESSAGE);
            }
        }
    }

    private void crearDocumentoPDF(File archivo) throws FileNotFoundException, DocumentException, BadElementException, MalformedURLException, IOException{
        DocumentoPDF documentoPDF = new DocumentoPDF(archivo);
        DocumentoPDF.SIZELETRA = 5;
        documentoPDF.agregarParrafoJustificado(""+Calendar.getInstance().getTime());
        DocumentoPDF.SIZELETRA = 12;
        documentoPDF.agregarParrafoCentrado("BiblioSoft :: Deudores");
        Image imagen = Image.getInstance(DocumentoPDF.class.getClassLoader().getResource("Imagenes/LogoBiblioSoft.gif"));
        documentoPDF.agregarImagenCentrada(imagen);
        String tipoLetra = "arial";
        int sizeLetra = 6;
        int formato = Font.NORMAL;
        BaseColor color = BaseColor.BLACK;
        documentoPDF.agregarTabla(panelConsultarDeudores.tablaDeudores, tipoLetra, sizeLetra, formato, color);
        documentoPDF.cerrarDocumento();
        JOptionPane.showMessageDialog(panelConsultarDeudores, "El Informe ha sido exportado con exito", "Exportar", JOptionPane.INFORMATION_MESSAGE);
    }
}
